package main

import "fmt"

/**
回调函数的使用流程
	1、定义一个函数的数据类型
	2、定义回调的函数，执行具体的操作
	3、定义一个主函数调用的函数，参数里要带有一个函数数据类型的参数
	4、在主函数里调用传入函数，传入要执行的函数，这里注意，传入的函数只写函数名字，不需要写括号，不需要传参
 */

//定义一个函数数据类型类型
type myfunc func(int, int) int

//定义四个函数实现加减乘除
func jia(a, b int) int  {
	return a + b
}

func jian(a, b int) int  {
	return a - b
}

func cheng(a, b int) int  {
	return a * b
}

func chu(a, b int) int  {
	return a / b
}

//定义一个函数，参入一个函数参数, 返回一个整型，格式是 （参数名  自己定义的函数类型)
func huidiao(a, b int, test myfunc) int  {
	return test(a, b)
}

func main()  {
	a := huidiao(10, 5, jia)
	fmt.Println("a =", a)
	b := huidiao(10, 5, jian)
	fmt.Println("b =", b)
	c := huidiao(10, 5, cheng)
	fmt.Println("c =", c)
	d := huidiao(10, 5, chu)
	fmt.Println("d =",d)
}
